
std::piecewise_construct:
	.zero	1
.LC0:
	.string	"A::run()"

A::run():
	pushq	%rbp
	movq	%rsp, %rbp
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	leaq	.LC0(%rip), %rsi
	leaq	std::cout(%rip), %rdi
	call	std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)@PLT
	movq	%rax, %rdx
	movq	std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL(%rip), %rax
	movq	%rax, %rsi
	movq	%rdx, %rdi
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	nop
	leave
	ret
.LC1:
	.string	"A::run1()"

A::run1():
	pushq	%rbp
	movq	%rsp, %rbp
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	leaq	.LC1(%rip), %rsi
	leaq	std::cout(%rip), %rdi
	call	std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)@PLT
	movq	%rax, %rdx
	movq	std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL(%rip), %rax
	movq	%rax, %rsi
	movq	%rdx, %rdi
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	nop
	leave
	ret
.LC2:
	.string	"A::run2()"

A::run2():
	pushq	%rbp
	movq	%rsp, %rbp
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	leaq	.LC2(%rip), %rsi
	leaq	std::cout(%rip), %rdi
	call	std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)@PLT
	movq	%rax, %rdx
	movq	std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL(%rip), %rax
	movq	%rax, %rsi
	movq	%rdx, %rdi
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	nop
	leave
	ret
.LC3:
	.string	"B::run()"

B::run():
	pushq	%rbp
	movq	%rsp, %rbp
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	leaq	.LC3(%rip), %rsi
	leaq	std::cout(%rip), %rdi
	call	std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)@PLT
	movq	%rax, %rdx
	movq	std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL(%rip), %rax
	movq	%rax, %rsi
	movq	%rdx, %rdi
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	nop
	leave
	ret

virtual thunk to B::run():
	movq	(%rdi), %r10
	addq	-24(%r10), %rdi
	jmp	.LTHUNK0
.LC4:
	.string	"B::run1()"

B::run1():
	pushq	%rbp
	movq	%rsp, %rbp
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	leaq	.LC4(%rip), %rsi
	leaq	std::cout(%rip), %rdi
	call	std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)@PLT
	movq	%rax, %rdx
	movq	std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL(%rip), %rax
	movq	%rax, %rsi
	movq	%rdx, %rdi
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	nop
	leave
	ret

virtual thunk to B::run1():
	movq	(%rdi), %r10
	addq	-32(%r10), %rdi
	jmp	.LTHUNK1

B::run3():
	pushq	%rbp
	movq	%rsp, %rbp
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	leaq	.LC4(%rip), %rsi
	leaq	std::cout(%rip), %rdi
	call	std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)@PLT
	movq	%rax, %rdx
	movq	std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL(%rip), %rax
	movq	%rax, %rsi
	movq	%rdx, %rdi
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	nop
	leave
	ret

C::run3():
	pushq	%rbp
	movq	%rsp, %rbp
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	leaq	.LC4(%rip), %rsi
	leaq	std::cout(%rip), %rdi
	call	std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)@PLT
	movq	%rax, %rdx
	movq	std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL(%rip), %rax
	movq	%rax, %rsi
	movq	%rdx, %rdi
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	nop
	leave
	ret
.LC5:
	.string	"D::run()"

D::run():
	pushq	%rbp
	movq	%rsp, %rbp
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	leaq	.LC5(%rip), %rsi
	leaq	std::cout(%rip), %rdi
	call	std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)@PLT
	movq	%rax, %rdx
	movq	std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL(%rip), %rax
	movq	%rax, %rsi
	movq	%rdx, %rdi
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	nop
	leave
	ret

virtual thunk to D::run():
	movq	(%rdi), %r10
	addq	-24(%r10), %rdi
	jmp	.LTHUNK2
.LC6:
	.string	"D::run4()"

D::run4():
	pushq	%rbp
	movq	%rsp, %rbp
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	leaq	.LC6(%rip), %rsi
	leaq	std::cout(%rip), %rdi
	call	std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)@PLT
	movq	%rax, %rdx
	movq	std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL(%rip), %rax
	movq	%rax, %rsi
	movq	%rdx, %rdi
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	nop
	leave
	ret

A::A():
	pushq	%rbp
	movq	%rsp, %rbp
	movq	%rdi, -8(%rbp)
	leaq	16+vtable for A(%rip), %rdx
	movq	-8(%rbp), %rax
	movq	%rdx, (%rax)
	movq	-8(%rbp), %rax
	movsd	.LC7(%rip), %xmm0
	movsd	%xmm0, 8(%rax)
	nop
	popq	%rbp
	ret

B::B():
	pushq	%rbp
	movq	%rsp, %rbp
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-16(%rbp), %rax
	movq	(%rax), %rdx
	movq	-8(%rbp), %rax
	movq	%rdx, (%rax)
	movq	-8(%rbp), %rax
	movq	(%rax), %rax
	subq	$24, %rax
	movq	(%rax), %rax
	movq	%rax, %rdx
	movq	-8(%rbp), %rax
	addq	%rax, %rdx
	movq	-16(%rbp), %rax
	movq	8(%rax), %rax
	movq	%rax, (%rdx)
	movq	-8(%rbp), %rax
	movsd	.LC8(%rip), %xmm0
	movsd	%xmm0, 8(%rax)
	nop
	popq	%rbp
	ret

B::B():
	pushq	%rbp
	movq	%rsp, %rbp
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	movq	-8(%rbp), %rax
	addq	$16, %rax
	movq	%rax, %rdi
	call	A::A()
	leaq	24+vtable for B(%rip), %rdx
	movq	-8(%rbp), %rax
	movq	%rdx, (%rax)
	movq	-8(%rbp), %rax
	leaq	16(%rax), %rdx
	leaq	88+vtable for B(%rip), %rax
	movq	%rax, (%rdx)
	movq	-8(%rbp), %rax
	movsd	.LC8(%rip), %xmm0
	movsd	%xmm0, 8(%rax)
	nop
	leave
	ret

C::C():
	pushq	%rbp
	movq	%rsp, %rbp
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-16(%rbp), %rax
	movq	(%rax), %rdx
	movq	-8(%rbp), %rax
	movq	%rdx, (%rax)
	movq	-8(%rbp), %rax
	movq	(%rax), %rax
	subq	$24, %rax
	movq	(%rax), %rax
	movq	%rax, %rdx
	movq	-8(%rbp), %rax
	addq	%rax, %rdx
	movq	-16(%rbp), %rax
	movq	8(%rax), %rax
	movq	%rax, (%rdx)
	movq	-8(%rbp), %rax
	movsd	.LC8(%rip), %xmm0
	movsd	%xmm0, 8(%rax)
	nop
	popq	%rbp
	ret

C::C():
	pushq	%rbp
	movq	%rsp, %rbp
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	movq	-8(%rbp), %rax
	addq	$16, %rax
	movq	%rax, %rdi
	call	A::A()
	leaq	24+vtable for C(%rip), %rdx
	movq	-8(%rbp), %rax
	movq	%rdx, (%rax)
	movq	-8(%rbp), %rax
	leaq	16(%rax), %rdx
	leaq	72+vtable for C(%rip), %rax
	movq	%rax, (%rdx)
	movq	-8(%rbp), %rax
	movsd	.LC8(%rip), %xmm0
	movsd	%xmm0, 8(%rax)
	nop
	leave
	ret

D::D():
	pushq	%rbp
	movq	%rsp, %rbp
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	movq	-8(%rbp), %rax
	addq	$40, %rax
	movq	%rax, %rdi
	call	A::A()
	movq	-8(%rbp), %rax
	leaq	8+VTT for D(%rip), %rdx
	movq	%rdx, %rsi
	movq	%rax, %rdi
	call	B::B()
	movq	-8(%rbp), %rax
	leaq	16(%rax), %rdx
	leaq	24+VTT for D(%rip), %rax
	movq	%rax, %rsi
	movq	%rdx, %rdi
	call	C::C()
	leaq	24+vtable for D(%rip), %rdx
	movq	-8(%rbp), %rax
	movq	%rdx, (%rax)
	movq	-8(%rbp), %rax
	leaq	40(%rax), %rdx
	leaq	128+vtable for D(%rip), %rax
	movq	%rax, (%rdx)
	leaq	80+vtable for D(%rip), %rdx
	movq	-8(%rbp), %rax
	movq	%rdx, 16(%rax)
	nop
	leave
	ret

main:
	pushq	%rbp
	movq	%rsp, %rbp
	subq	$160, %rsp
	movq	%fs:40, %rax
	movq	%rax, -8(%rbp)
	xorl	%eax, %eax
	leaq	-64(%rbp), %rax
	movq	%rax, %rdi
	call	D::D()
	leaq	-128(%rbp), %rax
	movq	%rax, %rdi
	call	B::B()
	leaq	-96(%rbp), %rax
	movq	%rax, %rdi
	call	C::C()
	leaq	-64(%rbp), %rax
	addq	$40, %rax
	movq	%rax, -152(%rbp)
	leaq	-128(%rbp), %rax
	addq	$16, %rax
	movq	%rax, -144(%rbp)
	leaq	-96(%rbp), %rax
	addq	$16, %rax
	movq	%rax, -136(%rbp)
	movl	$56, %esi
	leaq	std::cout(%rip), %rdi
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(unsigned long)@PLT
	movq	%rax, %rdx
	movq	std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)@GOTPCREL(%rip), %rax
	movq	%rax, %rsi
	movq	%rdx, %rdi
	call	std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))@PLT
	movl	$0, %eax
	movq	-8(%rbp), %rcx
	xorq	%fs:40, %rcx
	je	.L18
	call	__stack_chk_fail@PLT
.L18:
	leave
	ret

vtable for D:
	.quad	40
	.quad	0
	.quad	typeinfo for D
	.quad	D::run()
	.quad	B::run1()
	.quad	B::run3()
	.quad	D::run4()
	.quad	24
	.quad	-16
	.quad	typeinfo for D
	.quad	C::run3()
	.quad	0
	.quad	-40
	.quad	-40
	.quad	-40
	.quad	typeinfo for D
	.quad	virtual thunk to D::run()
	.quad	virtual thunk to B::run1()
	.quad	A::run2()

VTT for D:
	.quad	vtable for D+24
	.quad	construction vtable for B-in-D+24
	.quad	construction vtable for B-in-D+88
	.quad	construction vtable for C-in-D+24
	.quad	construction vtable for C-in-D+72
	.quad	vtable for D+128
	.quad	vtable for D+80
	.hidden	construction vtable for B-in-D

construction vtable for B-in-D:
	.quad	40
	.quad	0
	.quad	typeinfo for B
	.quad	B::run()
	.quad	B::run1()
	.quad	B::run3()
	.quad	0
	.quad	-40
	.quad	-40
	.quad	-40
	.quad	typeinfo for B
	.quad	virtual thunk to B::run()
	.quad	virtual thunk to B::run1()
	.quad	A::run2()
	.hidden	construction vtable for C-in-D

construction vtable for C-in-D:
	.quad	24
	.quad	0
	.quad	typeinfo for C
	.quad	C::run3()
	.quad	0
	.quad	0
	.quad	0
	.quad	-24
	.quad	typeinfo for C
	.quad	A::run()
	.quad	A::run1()
	.quad	A::run2()

vtable for C:
	.quad	16
	.quad	0
	.quad	typeinfo for C
	.quad	C::run3()
	.quad	0
	.quad	0
	.quad	0
	.quad	-16
	.quad	typeinfo for C
	.quad	A::run()
	.quad	A::run1()
	.quad	A::run2()

VTT for C:
	.quad	vtable for C+24
	.quad	vtable for C+72

vtable for B:
	.quad	16
	.quad	0
	.quad	typeinfo for B
	.quad	B::run()
	.quad	B::run1()
	.quad	B::run3()
	.quad	0
	.quad	-16
	.quad	-16
	.quad	-16
	.quad	typeinfo for B
	.quad	virtual thunk to B::run()
	.quad	virtual thunk to B::run1()
	.quad	A::run2()

VTT for B:
	.quad	vtable for B+24
	.quad	vtable for B+88

vtable for A:
	.quad	0
	.quad	typeinfo for A
	.quad	A::run()
	.quad	A::run1()
	.quad	A::run2()

typeinfo for D:
	.quad	vtable for __cxxabiv1::__vmi_class_type_info+16
	.quad	typeinfo name for D
	.long	2
	.long	2
	.quad	typeinfo for B
	.quad	2
	.quad	typeinfo for C
	.quad	4098

typeinfo name for D:
	.string	"1D"

typeinfo for C:
	.quad	vtable for __cxxabiv1::__vmi_class_type_info+16
	.quad	typeinfo name for C
	.long	0
	.long	1
	.quad	typeinfo for A
	.quad	-6141

typeinfo name for C:
	.string	"1C"

typeinfo for B:
	.quad	vtable for __cxxabiv1::__vmi_class_type_info+16
	.quad	typeinfo name for B
	.long	0
	.long	1
	.quad	typeinfo for A
	.quad	-6141

typeinfo name for B:
	.string	"1B"

typeinfo for A:
	.quad	vtable for __cxxabiv1::__class_type_info+16
	.quad	typeinfo name for A

typeinfo name for A:
	.string	"1A"

__static_initialization_and_destruction_0(int, int):
	pushq	%rbp
	movq	%rsp, %rbp
	subq	$16, %rsp
	movl	%edi, -4(%rbp)
	movl	%esi, -8(%rbp)
	cmpl	$1, -4(%rbp)
	jne	.L21
	cmpl	$65535, -8(%rbp)
	jne	.L21
	leaq	std::__ioinit(%rip), %rdi
	call	std::ios_base::Init::Init()@PLT
	leaq	__dso_handle(%rip), %rdx
	leaq	std::__ioinit(%rip), %rsi
	movq	std::ios_base::Init::~Init()@GOTPCREL(%rip), %rax
	movq	%rax, %rdi
	call	__cxa_atexit@PLT
.L21:
	nop
	leave
	ret

_GLOBAL__sub_I_main:
	pushq	%rbp
	movq	%rsp, %rbp
	movl	$65535, %esi
	movl	$1, %edi
	call	__static_initialization_and_destruction_0(int, int)
	popq	%rbp
	ret
	.quad	_GLOBAL__sub_I_main
.LC7:
	.long	0
	.long	1076101120
.LC8:
	.long	0
	.long	1072693248